#ifndef XMLSAXHANDLER_HPP
#define XMLSAXHANDLER_HPP

/*! \file xmlsaxhandler.hpp
 *
 *  \brief Definicja klasy XMLSaxHandler.
 *
 *  Plik zawiera definicję klasy XMLSaxHandler.
 *  Obiekt tej klasy reprezentuje format plików
 *  xml obsługiwanych przez aplikację.
 *
 *  \author Karol Kurpanik
 *  \date 2010.04.04
 *  \version 2.20.2
 */

#include <QtXml/QtXml>

#include "chartstylefactory.hpp"

/*!  \class XMLSaxHandler
 *
 * \brief Klasa definiująca format pliku xml.
 *
 * Jest to klasa dziedziczona po QXmlDefaultHandler
 * i zawiera metody służące do parsowania pliku
 * xml o określonym formacie.
 */
class XMLSaxHandler: public QXmlDefaultHandler
{
public:
    /*!
     * \brief Konstruktor klasy XMLSaxHandler.
     *
     * Konstruktor definiujący wartości pól prywatnych.
     * \post XMLSaxHandler::inBibstyleTag = false.
     * \return void
     */
    XMLSaxHandler();
    /*!
     * \brief Metoda określająca początek dokumentu xml.
     *
     * Metoda zwraca wartość true w momencie swojego wywołanie,
     * czyli wtedy, gdy rozpoznany zostanie początek dokumentu
     * xml.
     * \post XMLSaxHandler::inBibstyleTag = false.
     * \return bool
     */
    bool startDocument();
    /*!
     * \brief Metoda określająca koniec elementu w dokumencie xml.
     *
     * Metoda analizuje dokument pod kątem znaczników zamykających
     * element o nazwie przekazanej przez argument name. Gdy element
     * zostanie znaleziony, metoda zostaje wywołana i zwraca wartość
     * true.
     * \param name nazwa elementu
     * \return bool
     */
    bool endElement( const QString&, const QString&, const QString &name );
    /*!
     * \brief Metoda określająca początek elementu w dokumencie xml.
     *
     * Metoda analizuje dokument pod kątek znaczników o nazwie name.
     * Gdy element zostaje znaleziony następuje analiza jego atrybutów,
     * a następnie utworzenie instancji biblioteki stylów. Jeśli
     * metoda została wywołana, zostaje zwrócona wartość true.
     * \param name nazwa elementu
     * \param attrs lista atrybutów
     * \return bool
     */
    bool startElement( const QString&, const QString&, const QString &name, const QXmlAttributes &attrs );

private:
    /*!
     * \brief Flaga znacznika bibstyle.
     *
     * Pole przechowuje informacje o tym, czy znacznik bibstyle
     * został odczytany w danym momencie działa algorytmu parsowania.
     * Może przyjąć wartość true lub false.
     */
    bool inBibstyleTag;
};

#endif // XMLSAXHANDLER_HPP
